package com.baitiaojun.api.util;

import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;

import javax.sound.midi.Soundbank;
import java.util.Arrays;
import java.util.BitSet;

/**
 * @类名 BloomFilterUtil
 * @描述 TODO
 * @作者 白条君
 * @创建日期 2023/1/16 20:57
 * @版本 1.0
 */
public class BloomFilterUtil {

//    private static int size;
//
//    /**
//     * 为了降低错误率，使用加法hash算法，所以定义一个8个元素的质数数组，相当于构建 8 个不同的hash算法
//     */
//    private static final int[] seeds = {3, 5, 7, 11, 13, 31, 37, 61};
//
//    /**
//     * 相当于构建 8 个不同的hash算法
//     */
//    private static final HashFunction[] functions = new HashFunction[seeds.length];
//
//    /**
//     * 初始化布隆过滤器的 bitmap
//     */
//    private static final BitSet bitSet = new BitSet(size);
//
//    public BloomFilterUtil(int size) {
//        BloomFilterUtil.size = size;
//        for (int i = 0; i < seeds.length; i++) {
//            functions[i] = new HashFunction(size, seeds[i]);
//        }
//    }
//
//    public static class HashFunction {
//        private final int size;
//        private final int seed;
//
//        public HashFunction(int size, int seed) {
//            this.size = size;
//            this.seed = seed;
//        }
//
//        public int hash(String value) {
//            int result = 0;
//            int len = value.length();
//            for (int i = 0; i < len; i++) {
//                result = seed * result + value.charAt(i);
//            }
//            return (size - 1) & result;
//        }
//    }
//
//    /**
//     * 添加数据
//     * @param value
//     */
//    public void add(String value) {
//        if (StringUtils.isNotEmpty(value)) {
//            for (HashFunction function : functions) {
//                bitSet.set(function.hash(value), true);
//            }
//        }
//    }
//
//    public boolean contains(String value) {
//        if (StringUtils.isEmpty(value)) {
//            return false;
//        }
//        boolean flag = true;
//        for (HashFunction function : functions) {
//            flag = bitSet.get(function.hash(value));
//            if (Boolean.FALSE.equals(flag)) {
//                break;
//            }
//        }
//        return flag;
//    }
//
//    public static void main(String[] args) {
//        BloomFilterUtil bloomFilterUtil = new BloomFilterUtil(256 << 22);
//        bloomFilterUtil.add("test");
//        System.out.println(bloomFilterUtil.contains("test1"));
//    }
}
